#ifndef _UTILITY_H
#define _UTILITY_H
				
#include "circuitgraph.h"

// cout operator for Container (list, vector, etc.)					
template 
	< typename T
	, template<typename ELEM, typename ALLOC=std::allocator<ELEM> > class Container>
ostream& operator << (ostream&, const Container<T>&) ;



// cout operator for map container
template 
	< typename F
	  , typename S
	  , template <class Key, class T, class Compare = std::less<Key>,
	  			  class Allocator = std::allocator<std::pair<const Key, T> > > class map >

ostream& operator << (ostream&, const map<F, S> &) ;


// cout operator for pair operator
template <class F, class S, template <class T1, class T2> class pair >

ostream& operator << (ostream&, pair<F, S>) ;


template <typename T, typename Bundle>
void printVerticesProperty (CircuitGraph, T Bundle::*);

template <typename T, typename Bundle>
void printEdgesProperty (CircuitGraph, T Bundle::*);

#include "utility.hpp"

#endif